﻿#include <iostream>
using namespace std;
#include <thread>

#include<mutex>//互斥锁

#include <string>

////数据竞争问题，两个线程同时访问a，就可能出错
//int a = 0;
//void func()
//{
//	for (int i = 0; i < 10000; i++)
//		a += 1;
//}
//int main(void)
//{
//	thread t1(func);
//	thread t2(func);
//	t1.join();
//	t2.join();
//	cout << a << endl;
//	return 0;
//}

//正确，要使用互斥锁
int a = 0;
mutex mtx;//互斥量
void func()
{
	for (int i = 0; i < 10000; i++)
	{
		//写之前加锁
		mtx.lock();//加锁，别的线程不能访问
		//lock本质上是先判断是否上锁了，如果上锁了就阻塞，没有就进行上锁以及后面的操作，从而保证互斥访问共享变量
		a += 1;
		mtx.unlock();//解锁
	}
		
}
int main(void)
{
	thread t1(func);
	thread t2(func);
	t1.join();
	t2.join();
	cout << a << endl;
	return 0;
}